import Request from '@/components/luch-request/index.js'
import { deepMerge } from '@/components/luch-request/utils.js'
import { _config } from '@/config.js'

const getTokenStorage = () => {
	let token = ''
	try {
		token = uni.getStorageSync('token')
	} catch (e) {}
	return token
}

const http = new Request()
http.setConfig((config) => { /* 设置全局配置 */
	config.baseURL = _config.API_HOST /* 根域名不同 */
	config.header = {
		...config.header,
	}
	config.custom = {
		auth: true, // 是否传token
		loading: true // 是否使用loading
	}
	return config
})
const whiteList = ['/login', '/Teacher/Login', ] // 白名单 不用判断token
http.interceptors.request.use((config) => { /* 请求之前拦截器。可以使用async await 做异步操作 */
	if (whiteList.indexOf(config.url) < 0){
		let token = getTokenStorage()
		if(!token){	// 如果token不存在，return Promise.reject(config) 会取消本次请求
			console.log(config.url)
			return Promise.reject(config)
		}
	}
	else{
		console.log(config.url)
		return config
	}
	
	config.header = {
		...config.header,
	}
	if (config.custom.auth) {
		config.params = deepMerge(config.params, {
			token: getTokenStorage()
		});
	}
	if (config.custom.loading) {
		uni.showLoading()
	}
	return config
}, (config) => {
	return Promise.reject(config)
})


http.interceptors.response.use(async (response) => { /* 请求之后拦截器。可以使用async await 做异步操作  */
	if (response.data.code === 10001 || response.data.code === 10000) { // 服务端返回的状态码不等于200，则reject()
		uni.setStorageSync("token", '');
		uni.redirectTo({url: '/pages/login/login'});
		return Promise.reject(response)
	}
	uni.hideLoading();
	return response
}, (response) => { // 请求错误做点什么。可以使用async await 做异步操作
	uni.hideLoading();
	return Promise.reject(response)
})

export {
	http,getTokenStorage
}